/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package g7.controller;

import g7.dao.BacklogDAO;
import g7.dao.ProdutoDAO;
import g7.dao.SprintDAO;
import g7.modelo.Backlog;
import g7.modelo.Produto;
import g7.modelo.Sprint;
import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import org.primefaces.event.DateSelectEvent;
import org.primefaces.model.DualListModel;

/**
 *
 * @author julianna
 */
@ManagedBean
@SessionScoped
public class SprintMB extends AbstractMB implements Serializable {

    public static final String INJECTION_NAME = "#{sprintMB}";
    private static final long serialVersionUID = 1L;
    private Sprint sprint;
    private List<Sprint> sprints;
    private List<Produto> produtos;
//    private SprintFacade sprintFacade;
    private Produto produto;
    @EJB
    private SprintDAO sprintDAO;
    @EJB
    private ProdutoDAO produtoDAO;
    private DualListModel<Backlog> backlogs;
    @EJB
    private BacklogDAO backlogDAO;

    public SprintMB() {
        sprint = new Sprint();
        sprints = new ArrayList<Sprint>();
        backlogs = new DualListModel<Backlog>();
    }

    @PostConstruct
    public void init() {
        sprints = sprintDAO.listarTudo();
    }

    public void reset() {
        sprint = new Sprint();
        sprints = new ArrayList<Sprint>();
        produtos = produtoDAO.listaProdutos();
    }

    public void selecionarBacklogs() {
        List<Backlog> source = new ArrayList();
        List<Backlog> target = new ArrayList();

        source = backlogDAO.recuperarBacklogProduto(sprint.getProduto());

        sprint.setBacklogs(backlogDAO.carregarBacklogsSprint(sprint));

        if (sprint.getBacklogs() != null) {
            target = sprint.getBacklogs();
            for (Backlog b : target) {
                if (source.indexOf(b) >= 0) {
                    source.remove(source.indexOf(b));
                }
            }
        }
        backlogs = new DualListModel<Backlog>(source, target);
    }

    public void salvarBacklogs() {
        sprint.setBacklogs(backlogs.getTarget());
        sprintDAO.salvar(sprint);
    }


    /*
     * Editar e Salvar utilizam o mesmo método
     */
    public void salvar() {
        sprint.setProduto(produto);
        sprintDAO.salvar(sprint);
//        FacesMessageUtil.mensagemInfo("Sprint Cadastrado com Sucesso!");
        displayInfoMessageToUser("Sprint Cadastrada com Sucesso!");
//        closeDialog();
//        context.execute("dlgSprint.hide();");
        reset();
    }

    public void remover() {
        sprintDAO.excluir(sprint);
        getSprints();
    }

    public List<Sprint> getSprints() {
        sprints = sprintDAO.listarTudo();
        return sprints;
    }

    public Sprint getSprint() {
        return sprint;
    }

    public void setSprint(Sprint sprint) {
        this.sprint = sprint;
    }

//    public SprintFacade getSprintFacade() {
//        if(sprintFacade==null)
//            sprintFacade=new SprintFacade();
//        
//        return sprintFacade;
//    }
    public List<String> completeProduto(String query) {

        List<String> queryResult = new ArrayList<String>();
        List<Produto> allProdutos = produtoDAO.listaProdutos();

        for (Produto produto : allProdutos) {
            String value = produto.getNome();
            if (value.toLowerCase().contains(query.toLowerCase())) {
                queryResult.add(value);
            }
        }

        return queryResult;
    }

    public Produto getProduto() {
        return produto;
    }

    public void setProduto(Produto produto) {
        this.produto = produto;
    }

    public List<Produto> getProdutos() {
        return produtos;
    }

    public void setProdutos(List<Produto> produtos) {
        this.produtos = produtos;
    }

    public void handleDataInicioSelect(DateSelectEvent event) {
        SimpleDateFormat format = new SimpleDateFormat("d/M/yyyy");
        displayInfoMessageToUser("Data Início Selecionada: " + format.format(event.getDate()));
    }

    public void handleDataFimSelect(DateSelectEvent event) {
        SimpleDateFormat format = new SimpleDateFormat("d/M/yyyy");
        displayInfoMessageToUser("Data Fim Selecionada: " + format.format(event.getDate()));
    }

    public DualListModel<Backlog> getBacklogs() {
        return backlogs;
    }

    public void setBacklogs(DualListModel<Backlog> backlogs) {
        this.backlogs = backlogs;
    }

}
